Unit Clients;

Interface
Uses Comptes,crt;

TYPE 
	TClient = RECORD
		ID: INTEGER;
		nom: STRING;
		prenom: STRING;
		naissance: STRING;
		politesse: STRING;
		adresse: STRING;
		npa: STRING;
		localite: STRING;
		telephone: STRING;
		Comptes:TTabCompte;
	END;
		
	//concerne le tableau ou sont stockes les clients
	TTabClient = RECORD
		tabclient:ARRAY[1..100] of TClient;
		nbelement:INTEGER;
		DernierIDClient :INTEGER;
		DernierIDCompte :INTEGER;
	END;
	
//Procedure Initialisation TabClient
PROCEDURE initClient(VAR tabclient:TTabClient);
	
//Procédure de creation du client
PROCEDURE creationClient(ID_Client : INTEGER; VAR tabClients : TTabClient);

//Ajout Client 
PROCEDURE addClient(VAR tabClient:TTabClient;nom:STRING;prenom:STRING;adresse:STRING;npa:STRING;localite:STRING;telephone:STRING;naissance:STRING;politesse:STRING);

//Procedure qui permet d'enregistrer le client et ses données dans un tableau
Procedure enrClient(client : Tclient; VAR tabClient : TTabClient);	

//Fonction qui retourne l'indice d'un client
Function indiceClient(ID_Client:INTEGER ; collectionClient : TTabClient): INTEGER;
 
//Procedure qui recherche un compte a partir de son numero
Procedure rechercheCompte(tabClient:TTabClient;ID_Compte:INTEGER;VAR indiceClient:INTEGER;VAR indCompte:INTEGER);

//Procédure d'affichage des données d'un client
Procedure afficheclient(client:Tclient);

//Procédure qui liste tous les clients présent dans le tableau
PROCEDURE listing(collectionClient : TTabClient);

//Fonction de recherche d'un client dans le tableau client par son nom et prénom
Function rechercheClient(collectionClient : TTabClient; nom : STRING; prenom : STRING): INTEGER;	

//Procédure de suppresion d'un client et de ses données dans le tableau client
PROCEDURE suppressionClient(indice:INTEGER; VAR collectionclient:TTabClient); 

//Procédure de modification des données d'un client
Procedure modificationClient(indice : INTEGER;VAR clients : TTabclient);

//Procedure qui permet de crediter un client en fonction de ID_Compte
Procedure CrediterClient(VAR tabClient:TTabClient;ID_Compte:INTEGER;montant:REAL);

//Procedure qui permet de lister tous les comptes de tous le clients
Procedure listingComptesAllClients(tabClient:TTabClient);

//Procedure pour travailler avec un client
Procedure Client(ID_Client:INTEGER;VAR tabClient:TTabClient);

//Procedure qui permet de travailler sur un compte
Procedure CompteClient(VAR tabClient:TTabClient;indClient:INTEGER;indCompte:INTEGER);

// Procedure bouclement annuel de tous les clients
Procedure bouclementAnnuelClients(VAR tabClient:TTabClient);

implementation
//Procedure Initialisation TabClient
PROCEDURE initClient(VAR tabclient:TTabClient);
	Begin
		tabClient.DernierIDClient:=0;
		tabClient.DernierIDCompte:=0;
		tabClient.nbelement:=0;
	End;

//fonction de choix de la politesse lors de la creation client
function politesse():STRING;
	Var
		choixSexe:CHAR;
	Begin
		WRITELN('                     Politesse :');
		WRITELN('');
		WRITELN('                     1. Monsieur');
		WRITELN('                     2. Madame');
		WRITELN('');
		WRITE('                     Entrer votre choix : ');
		READLN (choixSexe);
		WRITELN('');
		CASE (choixSexe) OF
			'1':
				begin
					politesse := 'Monsieur';
				end;
			'2':
				begin
					politesse := 'Madame';
				end;	
			end;
	End; //Function politesse	

//Procédure de creation du client
PROCEDURE creationClient(ID_Client : INTEGER; VAR tabClients : TTabClient);

VAR
	clientTemp : Tclient;

BEGIN
	//initialise clientTemp
	clientTemp.nom:='';
	clientTemp.prenom:='';
	clientTemp.naissance:='';
	clientTemp.politesse:='';
	clientTemp.adresse:='';
	clientTemp.npa:='';
	clientTemp.localite:='';
	clientTemp.telephone:='';
	clientTemp.comptes.nbcompte:=0;
	ID_Client:=tabClients.DernierIDClient + 1;
	tabClients.DernierIDClient:=tabClients.DernierIDClient + 1;
   //Saisie des données du client
   
   clientTemp.ID:=ID_Client;
	//Définition du nom du client
	WHILE(clientTemp.nom = '') DO
	BEGIN																
		WRITE('                     Entrez un nom : ');
		READLN(clientTemp.nom);
		WRITELN('');
		IF (clientTemp.nom = '') THEN
			WRITELN('               Il est obligatoire de saisir un nom');
	END;

	//Définition du prénom du client
	WHILE (clientTemp.prenom = '')	DO	
	BEGIN																
		WRITE('                     Entrez un prenom : ');
		READLN(clientTemp.prenom);
		WRITELN('');
		IF (clientTemp.prenom = '') THEN
			WRITELN('               Il est obligatoire de saisir un prenom');
	END;
	//Définition de la date de naissance du client
	WHILE(clientTemp.naissance = '')	DO
	BEGIN																
		WRITE('                     Entrez une date de naissance : ');
		READLN(clientTemp.naissance);
		WRITELN('');
		IF (clientTemp.naissance = '') THEN
			WRITELN('               Il est obligatoire de saisir une date de naissance');
	END;
	//Définition de la formule de politesse du client
	WHILE(clientTemp.politesse = '')	DO
	BEGIN																
		
		clientTemp.politesse := politesse;
		IF (clientTemp.politesse = '') THEN
			WRITELN('               Il est obligatoire de saisir une politesse');
	END;
	//Définition de l'adresse du client
	WHILE(clientTemp.adresse = '')	DO
	BEGIN																
		WRITE('                     Entrez une adresse : ');
		READLN(clientTemp.adresse);
		WRITELN('');
		IF (clientTemp.adresse = '') THEN
			WRITELN('               Il est obligatoire de saisir une adresse');
	END;
	//Définition du code postal du client
	WHILE(clientTemp.npa = '')	DO	
	BEGIN																
		WRITE('                     Entrez un code postal : ');
		READLN(clientTemp.npa);
		WRITELN('');
		IF (clientTemp.npa = '') THEN
			WRITELN('               Il est obligatoire de saisir un code postal');
		
	END;
	//Définition de la localité du client
	WHILE(clientTemp.localite = '')	DO
	BEGIN																
		WRITE('                     Entrez une localite : ');
		READLN(clientTemp.localite);
		WRITELN('');
		IF (clientTemp.localite = '') THEN
			WRITELN('               Il est obligatoire de saisir un lieu de residence');
	END;

	WHILE(clientTemp.telephone = '') DO	
	BEGIN												//Définition du numéro de téléphone du client
		WRITE('                     Entrez un numero de telephone : ');
		READLN(clientTemp.telephone);
		WRITELN('');
		IF (clientTemp.telephone = '') THEN
			WRITELN('               Il est obligatoire de saisir un numero de telephone');
	END;
	enrClient(clientTemp,tabClients);
END; // Fin CreationClient

//Ajout Client 
PROCEDURE AddClient(VAR tabClient:TTabClient;nom:STRING;prenom:STRING;adresse:STRING;npa:STRING;localite:STRING;telephone:STRING;naissance:STRING;politesse:STRING);
	Begin
		tabClient.nbelement += 1;
		tabclient.DernierIDClient +=1;
		tabClient.tabclient[tabClient.nbelement].ID:= tabclient.DernierIDClient;
		tabClient.tabclient[tabClient.nbelement].nom:= nom;
		tabClient.tabclient[tabClient.nbelement].prenom:= prenom;
		tabClient.tabclient[tabClient.nbelement].naissance:= naissance;
		tabClient.tabclient[tabClient.nbelement].politesse:= politesse;
		tabClient.tabclient[tabClient.nbelement].adresse:= adresse;
		tabClient.tabclient[tabClient.nbelement].npa:= npa;
		tabClient.tabclient[tabClient.nbelement].localite:= localite;
		tabClient.tabclient[tabClient.nbelement].telephone:= telephone;
		tabClient.tabclient[tabClient.nbelement].Comptes.nbcompte:=0;

	End; //Fin AddClient

//Procedure qui permet d'enregistrer le client et ses données dans un tableau
Procedure enrClient(client : Tclient; VAR tabClient : TTabClient);	
	VAR
		choix: STRING;

	//On appelle l'enregistrement dans la fonction qui crée ou modifie un compte
	BEGIN		
		WRITE('                     Voulez-vous enregistrer le client: o / n : ');
		READLN(choix);
		WRITELN('');
		IF(choix = 'o') THEN
			BEGIN
				tabClient.tabclient[tabClient.nbelement+1]:=client;	
				tabClient.nbelement:=tabClient.nbelement+1;			 	//nbelement augmente de 1 avec ce nouvel enregistrement
			END;
	END; // Fin enrClient

//Fonction qui retourne l'indice d'un client
Function indiceClient(ID_client:INTEGER ; collectionClient : TTabClient): INTEGER;
	var 
		i : INTEGER;

	BEGIN
		i:=1;
		WHILE((ID_client <> collectionClient.tabclient[i].ID) AND (i<=collectionClient.nbelement)) DO 
		BEGIN			//Boucle qui compare notre ID_Client à l'ID_Client de notre tableau et s'arrête sitôt qu'on se trouve à la hauteur de l'enregistrement
			i:=i + 1;
		END;
		IF(i>collectionClient.nbelement) THEN
			i:=-1;			//Si à la fin de la boucle il n'a tjrs pas trouvé il donne la valeur -1 pour définir un cas de sortie;	
		indiceClient:=i;
	END; //Fin IndiceClient

//Procedure qui recherche un compte a partir de son numero
Procedure rechercheCompte(tabClient:TTabClient;ID_Compte:INTEGER;VAR indiceClient:INTEGER;VAR indCompte:INTEGER);
	Var
		i : INTEGER;
	Begin
		indCompte:=-1;
		i:=1;
		WHILE(i<=tabClient.nbelement) AND (indCompte=-1)DO
			Begin
				indCompte := indiceCompte(ID_Compte,tabClient.tabclient[i].comptes);
				IF(indCompte=-1)THEN
					i+=1;
			End; //Boucle IndiceClient
		IF(indCompte=-1) THEN
			indiceClient:=-1
		else
			indiceClient:=i;
		
	End; // Fin rechercheCompte

//Procédure d'affichage des données d'un client
Procedure afficheclient(client:Tclient);		
	Begin
		//Affiche toutes les informations concernant un client depuis le tableau
		WRITELN('');
		WRITELN('');
		WRITELN('Numero de client    : ',client.ID);
		WRITELN('Politesse           : ',client.politesse);	
		WRITELN('Nom                 : ',client.nom);
		WRITELN('Prenom              : ',client.prenom);
		WRITELN('Date de naissance   : ',client.naissance);
		WRITELN('Adresse             : ',client.adresse);
		WRITELN('NPA Localite        : ',client.npa,' ',client.localite);
		WRITELN('Numero de telephone : ',client.telephone);
		WRITELN('');
	End; // Fin Procedure affichieClient
	

//Procédure qui liste tous les clients présent dans le tableau
PROCEDURE listing(collectionClient : TTabClient);			
	Var
		i:INTEGER;
	Begin
		i:=1;
		WHILE(i<=collectionClient.nbelement) DO
			begin
				//Listing complet des clients
				afficheclient(collectionClient.tabclient[i]);						
				WRITELN('**********************************************');
				i:= i+1;
			end;
	end; // Fin Procedure listing

//Fonction de recherche d'un client dans le tableau client par son nom et prénom
Function rechercheClient(collectionClient : TTabClient; nom : STRING; prenom : STRING): INTEGER;
	Var
		i : integer;
		trouve : BOOLEAN;
		IDClient : INTEGER;	
	begin
		i := 1;
		trouve := FALSE;
		WRITE('Veuillez saisir le nom du client : ');
		READLN (nom);
		WRITE('Veuillez saisir le prenom du client : ');
		READLN (prenom);
		WHILE (i <= collectionClient.nbelement) DO
			begin
				IF 	(collectionClient.tabclient[i].nom = nom) AND
												(collectionClient.tabclient[i].prenom = prenom) THEN
					begin
						afficheclient(collectionClient.tabclient[i]);
						WRITELN('**********************************************');
						WRITELN('');
						trouve := TRUE;
					end;													
				i := i + 1;
			end; // Boucle While(i <= collectionClient.nbelement)
		IF (NOT trouve) THEN
			begin
				WRITELN('');
				WRITELN('Ce client n''existe pas');
				rechercheClient := -1;
				WRITELN('');
			end
		 ELSE
			begin
				WRITELN('');
				WRITELN('');
				WRITE('Saississez le numero de client : ');
				READLN(IDClient);
				rechercheClient := IDClient;
			end; 
	end; // End Procedure RechercheClient

//Procédure de suppresion d'un client et de ses données dans le tableau client		
PROCEDURE suppressionClient(indice:INTEGER; VAR collectionclient:TTabClient); 
	VAR
		choix:STRING;
		i:INTEGER;	
	BEGIN	
		i:=indice;
		IF (collectionclient.tabclient[i].Comptes.nbcompte > 0) THEN
			begin
				WRITELN('Ce client possede encore des comptes, veuillez les cloturer puis supprimer le client');
				WRITELN('');
				WRITELN('Taper ENTER pour continuer');READLN();// Permet de figer l'ecran
			end
		ELSE
			begin
				WRITE('Confirmez la suppression du client ? o/n : ');
				READ(choix);				
				IF(choix ='o') THEN
				BEGIN					
					WHILE(i <= collectionClient.nbelement) DO
					BEGIN
							collectionClient.tabclient[i] := collectionClient.tabclient[i+1];
								i:=i+1;
					END;
					collectionClient.nbelement-=1;
					WRITELN('');
					WRITELN('Ce client a ete supprime');
					WRITELN('');
					WRITELN('Taper ENTER pour continuer');READLN();// Permet de figer l'ecran
				END;
			end
	END; // Fin Procedure suppressionClient
	
//Procédure de modification des données d'un client
Procedure modificationClient(indice : INTEGER;VAR clients : TTabclient);
	VAR	
		clienttemp : TClient;
		choix:STRING; 
		quitter:BOOLEAN;
		saisie:STRING;
	BEGIN		
		// creation des variables
		clienttemp:=clients.tabclient[indice];
	    //boucle tant que la sauvegarde n'est pas demandée
		quitter:=false;	
		WHILE(NOT quitter) DO
			Begin
				//choix:=' ';
				
				//Affichage des données clients
				WRITELN('');
				WRITELN('1. Nom                 : ',clienttemp.nom);
				WRITELN('2. Prenom              : ',clienttemp.prenom);
				WRITELN('3. Date de naissance   : ',clienttemp.naissance);
				WRITELN('4. Politesse           : ',clienttemp.politesse);
				WRITELN('5. Adresse             : ',clienttemp.adresse); 
				WRITELN('6. NPA                 : ',clienttemp.npa);
				WRITELN('7. Localite            : ',clienttemp.localite);
				WRITELN('8. Numero de telephone : ',clienttemp.telephone);
				WRITELN('');
				WRITELN('S. : Quitter et sauvegarder');
				WRITELN('Q. : Quitter');
				
				
				//choix du point à modifier
				WRITELN('');
				WRITE('Entrer votre choix : ');
				READLN(choix);
				WRITELN('');

				CASE (choix) OF
				//Mofication des données des clients d'après le menu de choix
				'1':
					//Modification du nom
					begin
					WRITE('Nom: ');																				
					READLN(saisie);
					clienttemp.nom:=saisie;
					end;
					
				'2':
					//Modification du prénom
					begin
					WRITE('Prenom: ');																		
					READLN(saisie);
					clienttemp.prenom:=saisie;
					end;
				'3':
					//Modification de la date de naissance
					Begin
					WRITE('Date de naissance: ');																	
					READLN(saisie);
					clienttemp.naissance:=saisie;
					end;
				'4':
					begin;
					clienttemp.politesse:=politesse()
					end;
				'5':
					//Modification de l'adresse
					begin
					WRITE('Adresse: ');																			
					READLN(saisie);
					clienttemp.adresse:=saisie;
					end;
				'6':
					//Modification du code postal
					begin
					WRITE('NPA: ');																				
					READLN(saisie);
					clienttemp.npa:=saisie;
					end;
				'7':
					//Modification de la localité
					begin
					WRITE('Localite: ');																		
					READLN(saisie);
					clienttemp.localite:=saisie;
					end;
				'8':
					//Modification du numéro de téléphone
					begin
					WRITE('Telephone: ');																			
					READLN(saisie);
					clienttemp.telephone:=saisie;
					end;
				'Q':
					begin
					quitter:=true; //arrêt de la saisie.
					end;
				'S':	
					begin
					quitter:=true;
					clients.tabclient[indice]:=clienttemp;	
					WRITELN('Changement sauvgarder');												
					end;
				END; // Fin CaseOF												
			END; // Fin BOUCLE (NOT quitter)
	END; // Fin Procedure modificationClient
	
//Procedure qui permet de crediter un client en fonction de ID_Compte	
Procedure CrediterClient(VAR tabClient:TTabClient;ID_Compte:INTEGER;montant:REAL);	
	Var
		i:INTEGER;
		indCo : INTEGER;
	Begin
		i:=1;
		indCo:=-1;
		WHILE(i<=tabClient.nbelement) AND (indCo=-1)DO
			Begin
				indCo := indiceCompte(ID_Compte,tabClient.tabclient[i].comptes);
				i+=1;
			End;
		IF(indCo<>-1)THEN
			Begin
				tabClient.tabclient[i].comptes.compteclient[indCo].solde += montant;
				WRITELN('Le montant de ',montant:0:2,' a ete virer au client:');
				afficheclient(tabClient.tabclient[i]);
			end
		 else
			Begin
				WRITELN('le virement a été transmit a la banque responsable')
			End;
	End; // Fin ProcedureCrediter Client

//Procedure qui permet de lister tous les comptes de tous le clients
Procedure listingComptesAllClients(tabClient:TTabClient);
	Var
		i:INTEGER;
	Begin
		i:=1;
		WHILE(i<=tabClient.nbelement)DO
			Begin
				afficherComptes(tabClient.tabclient[i].Comptes);
				i += 1;
			End;
	End; // Fin procedure listingComptesAllClients
	
//Procedure pour travailler avec un client
Procedure Client(ID_Client:INTEGER;VAR tabClient:TTabClient);
	Var 
		precedent1 : Boolean;
		choixClient : CHAR;
		IndiceCo: INTEGER;
		Indice : INTEGER;
		i:INTEGER;
		temp:INTEGER;
	Begin
	
		indice := indiceClient(ID_Client,tabClient);
		IF(indice <> -1) THEN
			begin
				i:=0;
				precedent1 := False;
				WHILE (NOT precedent1) DO
					begin
					ClrScr;
					i+=1;
					WRITELN(i);
					WRITELN('---------------------------------------');
					WRITELN('                Operation CLIENT       ');
					WRITELN('---------------------------------------');					
					afficheclient(tabClient.tabClient[indice]);
					WRITELN('');
					WRITELN('Ce client possede ',tabClient.tabclient[indice].Comptes.nbcompte,' compte(s)');
					WRITELN('Sa Fortune du client est de: ',fortune(tabClient.tabclient[indice].Comptes):0:2,'CHF');
					WRITELN('');	
					WRITELN('MENU CLIENT');
					WRITELN('');
					WRITELN('1. Modifier ce client');
					WRITELN('2. Creer un compte a ce client');
					WRITELN('3. Selectionner un compte de ce client');
					WRITELN('4. Supprimer ce client');
					WRITELN('5. Precedent');
					WRITELN('');
					WRITE('Entrer votre choix: ');
					READLN(choixClient);
					WRITELN('');									
								
					CASE (choixClient) OF
						'1': 
							begin
								modificationClient(indice,tabClient);
							end;
						'2': 
							begin
								creationCompte(tabClient.tabclient[indice].Comptes,tabClient.DernierIDCompte);
							end;
						'3': 
							begin								
								indiceCo:=selectCompte(tabClient.tabclient[indice].Comptes);
								CompteClient(tabClient,indice,indiceCo);
								
							end; // Case 3 of ChoixClient
						'4': 
							begin
								temp:=tabClient.nbelement;
								suppressionClient(indice,tabClient);
								IF (Temp<>tabClient.nbelement) THEN // si il y suppression on remonte au menu precedent
									precedent1:=TRUE		//retourne au menu precedent vu que le client n'existe plus
							end;
						'5': 
							begin
								precedent1 := TRUE;
							end;
					end; // END CASE MENUCLIENT
							
				END; // Boucle WHILE Client
			end; //
			//ELSE
			//precedent1 := TRUE;
	End;	// End Procedure client
	
//Procedure qui permet de travailler sur un compte
Procedure CompteClient(VAR tabClient:TTabClient;indClient:INTEGER;indCompte:INTEGER);
	Var
		precedent : BOOLEAN;
		choixCompte : STRING;
		choixVir : INTEGER;
		ID_Compte : INTEGER;
		montant : DOUBLE;
		tempNbCompte : INTEGER;
		IndiceClient2:INTEGER;
		IndiceCompte2:INTEGER;
		
	Begin
		precedent := False;
		WHILE (NOT precedent) AND (indCompte<>0) DO
			begin
				ClrScr;
				WRITELN('---------------------------------------');
				WRITELN('                Operation COMPTE       ');
				WRITELN('---------------------------------------');
				affichercompte(tabClient.tabclient[indClient].Comptes.compteclient[indCompte]);
				WRITELN('');
				WRITELN('MENU COMPTE');
				WRITELN('');
				WRITELN('1. Debiter ce compte');
				WRITELN('2. Crediter ce compte');
				WRITELN('3. Virer une somme d''argent');
				WRITELN('4. Supprimer ce compte');
				WRITELN('5. Precedent');
				WRITELN('');
				WRITE('Entrer votre choix: ');
				READLN(choixCompte);
				WRITELN('');
				CASE choixCompte OF
					'1': // Debit
						begin
						retrait(tabClient.tabclient[indClient].Comptes.compteclient[indCompte]);
						WRITELN('Taper ENTER pour continuer');
						READLN();  // Permet de figer l'ecran.
						end;
					'2': // Depot
						begin
						depot(tabClient.tabclient[indClient].Comptes.compteclient[indCompte]);
						WRITELN('Taper ENTER pour continuer');
						READLN();  // Permet de figer l'ecran.
						end;
					'3': //Virement
						begin
						montant:=0;
						Write('Entrer le montant desirer a virer: ');
						Read(montant);
						IF(testSolvabilite(tabClient.tabclient[indClient].Comptes.compteclient[indCompte],montant))THEN
							Begin
								WRITELN('');
								WRITELN('Compte a crediter');
								WRITELN('');
								WRITELN(' 1. Selectionner propre compte');
								WRITELN(' 2. Saisir un numero de compte');
								WRITELN(' 3. Rechercher un client puis son compte');
								WRITELN('');
								choixVir:=0;
								WHILE(choixVir <> 1)AND(choixVir <> 2)AND (choixVir <> 3)DO
									Begin
										WRITE('Saisissez votre choix: ');
										READLN(choixVir);
										WRITELN('');								
										CASE choixVir OF
											1:
												Begin
												indiceCompte2:=selectCompte(tabClient.tabclient[indClient].Comptes);
												indiceClient2:=indClient
												End;
											2:
												Begin
												WRITE('Veuillez Entrez le numero du compte crediteur: ');
												READLN(ID_Compte);
												rechercheCompte(tabClient,ID_Compte,IndiceClient2,IndiceCompte2);
												End;
											3:
												Begin										
												indiceClient2:=indiceClient(rechercheClient(tabClient,'',''),tabclient);
												indiceCompte2:=selectCompte(tabClient.tabclient[indiceClient2].Comptes);
												End;
											END; //Fin CASE OF
									end;//DO WHILE menu
								debit(tabClient.tabclient[indClient].Comptes.compteclient[indCompte],montant);
								if(IndiceCompte2<>-1) then
									credit(tabClient.tabclient[indiceClient2].Comptes.compteclient[IndiceCompte2],montant)
								 else
									WRITELN('Le credit de ',montant:0:2,' pour le compte ',ID_Compte,' est transmit.');
								//CrediterCLient(tabClient,ID_Compte,montant);
							end; // Fin true IF solvabilite
						WRITELN('Taper ENTER pour continuer');
						READLN(); READLN(); // Permet de figer l'ecran.
						end;
					'4': 
						begin
						tempNbCompte:= tabClient.tabclient[indClient].Comptes.nbcompte;
						cloture(indCompte,tabClient.tabclient[indClient].Comptes);
						IF (tempNbCompte<> tabClient.tabclient[indClient].Comptes.nbcompte) THEN
							precedent := TRUE;
						WRITELN('Taper ENTER pour continuer');
						READLN();  // Permet de figer l'ecran.
						end;
					'5': 
						begin
						precedent := TRUE;
						end;
				end; // End CASE OF MENUCOMPTE
		end; // END DOWHILE MENU COMPTE	
	End; // Procedure CompteClient

// Procedure bouclement annuel de tous les clients
Procedure bouclementAnnuelClients(VAR tabClient:TTabClient);
	Var	
		i,j:INTEGER;
		choix:STRING;
	Begin
		WRITE('Etes vous sur de vouloir fair le bouclement annuel sur tous les comptes o/n: ');
		READLN(choix);
		IF(choix='o')THEN
			Begin
				i:=1;
				WHILE(i<=tabClient.nbelement)DO
					Begin
						j:=1;
						WRITELN('');
						WRITELN('Bouclement:');
						afficheclient(tabclient.tabclient[i]);
						WHILE(j<=tabclient.tabclient[i].Comptes.nbcompte)DO
							begin
								bouclementCompte(tabclient.tabclient[i].Comptes.compteclient[j],360);
								j += 1;
							end;
						WRITELN('');
						i += 1;
					End;
			End;
	end; // End bouclementAnnuelClients
END. // Fin Implemantation
